package jp.ac.aiit.yc.sww.database.dao;

import static jp.ac.aiit.yc.sww.constant.Constants.*;
import static jp.ac.aiit.yc.sww.util.Util.null2String;
import static jp.ac.aiit.yc.sww.util.Util.parseInt;

import java.sql.CallableStatement;
import java.sql.ResultSet;
import java.util.Map;

import jp.ac.aiit.yc.sww.Resources.SwwResource;
import jp.ac.aiit.yc.sww.database.dto.NoteDataDto;
import jp.ac.aiit.yc.sww.database.dto.PresentDto;
import jp.ac.aiit.yc.sww.database.dto.SwwDtoIF;

public class NoteDataDao extends BaseDAO implements SwwDaoIF {

	/**
	 * コンストラクタ
	 * @param なし
	 * @return なし
	 */
	public NoteDataDao() {
		// TODO Auto-generated constructor stub
	}

	/**
	 * テーブルより取得したResultSetよりDTOを作成する。
	 * @author 
	 * @param ResultSet DBテーブルより取得した結果セット
	 * @return SwwDtoIF DTO(インターフェースの形で返す)
	 */
	@Override
	public SwwDtoIF createDto(ResultSet rs) throws Exception {
		//値セットのDTO作成
		NoteDataDto dto = new NoteDataDto();
		String user = rs.getString("event.user_id");
		String text = rs.getString("stick_event.text");
		Long num = rs.getLong("stick_event.sticky_id");
		Long height = rs.getLong("stick_event.height");
		Long width = rs.getLong("stick_event.width");
		Long x  = rs.getLong("stick_event.x");
		Long y  = rs.getLong("stick_event.y");
		
		dto.noteProperties(num, user, height, width, x, y, text);
		
		return dto;
	}

	/**
	 * Insert用ストアドプロシージャをプロパティファイル(sql.properties)より取得する。
	 * @author 
	 * @param なし
	 * @return String ストアドプロシージャ
	 */
	@Override
	public String getInsertSP() {
		return getSP(SwwResource.SP_STICKY_EVENT);
	}

	/**
	 * Select用ストアドプロシージャをプロパティファイル(sql.properties)より取得する。
	 * @param なし
	 * @return String ストアドプロシージャ
	 */
	@Override
	public String getQuerySP() {
		return getSP(SwwResource.SP_STICKY_INFO);
	}

	
	@Override
	public boolean register(SwwDtoIF dto) {
		// TODO Auto-generated method stub
		return false;
	}
	
	/**
	 * セットしたヘッダーを取得する。
	 * @param なし
	 * @return Map ヘッダー
	 */
	@Override
	public Map<String, String> getHeaders() {
		return super.getHeaders();
	}

	/**
	 * ヘッダーをセットする。 
	 * @param Map ヘッダー
	 * @return なし
	 */
	@Override
	public void setHeaders(Map<String, String> headers) {
		super.setHeaders(headers);

	}

	/**
	 * DTOとメッセージヘッダーからInsert用ストアドのパラメータを設定する。
	 * @param CallableStatement	ストアドパラメータ
	 * @param SwwDtoIF	DTO(インターフェースの形で渡す)
	 * @return Map ヘッダー
	 */
	@Override
	public CallableStatement setInsertParam(CallableStatement cStmt,
			SwwDtoIF dtoIF) throws Exception {
		NoteDataDto dto =  (NoteDataDto)dtoIF;
		Map headers = getHeaders();
	
		cStmt.setString(1, null2String(headers.get(HEADER_USER)));
		cStmt.setString(2, null2String(headers.get(HEADER_ROOM)));
		cStmt.setInt(3, parseInt(headers.get(HEADER_DOC)));
		cStmt.setInt(4, parseInt(headers.get(HEADER_PAGE)));
		cStmt.setLong(5, dto.getNum());
		cStmt.setString(6, null2String(dto.getText()));
		cStmt.setLong(7, dto.getX());
		cStmt.setLong(8, dto.getY());
		cStmt.setLong(9, dto.getHeight());
		cStmt.setLong(10, dto.getWidth());
		
		return cStmt;
	}

	/**
	 * DTOとメッセージヘッダーからSelect用ストアドのパラメータを設定する。
	 * @param CallableStatement	ストアドパラメータ
	 * @param SwwDtoIF	DTO(インターフェースの形で渡す)
	 * @return Map ヘッダー
	 */
	@Override
	public CallableStatement setQueryParam(CallableStatement cstmt,
			SwwDtoIF dtoIF) throws Exception {
		PresentDto dto =  (PresentDto)dtoIF;
		cstmt.setInt(1, Integer.parseInt(dto.getSticky_e_ids()));
		return cstmt;
	}

}
